﻿Imports System.Text.RegularExpressions
Imports System.Collections.ObjectModel

Class FLParamConfigGral

    Private lstCatalogoInter As New List(Of CTCatalogoGenerico)
    Private tituloMensaje As String = "Configuración Flujo de Liquidez"
    Private servicioGenerales As CSServiciosGenerales
    Private operacionFecNoLab As TipoOperacion
    Private lstFechasInhabiles As List(Of CFechaNoLab)

    Private __LEYENDA_ALTA_FONDO__ As String = "Escriba aqui..."

    Private servicio As CSCatalogo

    Private lstFondosIndeval As  ObservableCollection (Of CTFondoIndeval)
    Private lstTVNGxFondo As List(Of CTFondoTVNG)
    Private lstIntermediarioxFondo As List(Of CTFondoIntermediario)


    Private fondoIndevalEnEdicion As CTFondoIndeval
    Private fondoIndevalActual As CTFondoIndeval



    Public Sub New()

        Dim catalogo = New CTCatalogoGenerico()
        lstCatalogoInter = catalogo.ObtieneCatalogo(6)
        servicioGenerales = New CSServiciosGenerales()

        InitializeComponent()
        cargarFechasNoLab()
        operacionFecNoLab = TipoOperacion.ninguna
        Me.cmbIntermediarios.ItemsSource = lstCatalogoInter
        Me.cmbIntermediarios.SelectedIndex = 0

        Dim fechaHoy As DateTime = Date.Now
        If Not ValidaFechaHabil(fechaHoy) Then
            fechaHoy = GetSiguienteDiaHabil(fechaHoy)
        End If
        Me.dtpModificarFechaBSO.Text = fechaHoy.ToString("dd/MM/yyyy")
        Me.dtpCancelFechaBSO.Text = fechaHoy.ToString("dd/MM/yyyy")

        '------------------Catálgo fondos------------------
        servicio = New CSCatalogo()

        Dim sMsgError As String = ""
        lstFondosIndeval = servicio.ObtenerFondosIndeval(sMsgError)
        If Not sMsgError.Equals("") Then
           MessageBox.Show(sMsgError, "Catálogo de Fondos-Indeval", MessageBoxButton.OK, MessageBoxImage.Exclamation)
        Else
           grdFondosIndeval.ItemsSource = lstFondosIndeval
           grdFondosIndeval.UpdateLayout()
        End If





        '--------------------------------------------------

        Mouse.OverrideCursor = Nothing
    End Sub

    Private Enum TipoOperacion

       ninguna = 0
       Alta = 1
       Actualizacion = 2
       Baja = 2
     End Enum


#Region "TAB CONFIG BSO"

    Private Sub btnModificarBSO_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnModificarBSO.Click
        Mouse.OverrideCursor = Cursors.Wait
        Dim eventoBit = CBitacoraFRIDA.GenerarEvento(CBitacoraFRIDA.CveEventosBit.CONFIG_BSO, CServiciosMacrosSyBaseDB.IDUSUARIO, "FLParamConfigGral.xaml -> btnModificarBSO")
        Try
            If ValidaFechaHabil(DateTime.Parse(Me.dtpModificarFechaBSO.Text)) Then
                eventoBit.GuadarDetalle("Fecha",Me.dtpModificarFechaBSO.Text)
                If MessageBox.Show ("En caso de existir BSO abierta ésta se cancelará, ¿Desea guardar los cambios?", tituloMensaje, MessageBoxButton.YesNo, MessageBoxImage.Question)  = MessageBoxResult.Yes Then
                    servicioGenerales.ModificarFechaBSO(DateTime.Parse(Me.dtpModificarFechaBSO.Text))
                    servicioGenerales.RegistrarNotificacion("Config BSO - Se modifica fecha BSO")
                    MessageBox.Show("Operación Exitosa" , tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Information)
                End If
            Else
                MessageBox.Show ("La fecha seleccionada no es un día habil.", tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Exclamation) 
            End If
         eventoBit.ActualizarFechaFinDelEvento()
         Catch ex As Exception
            Dim errorBit = eventoBit.GuardarError("Error al actualizar BSO: " & ex.Message)
            eventoBit.ActualizarFechaFinDelEvento()
            Mouse.OverrideCursor = Nothing
            MessageBox.Show("Error TI500. Error al actualizar BSO: " & ex.Message & " -Codigo:" & errorBit.IdError , tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Error)
        End Try
        
        Mouse.OverrideCursor = Nothing
    End Sub

    Private Sub btnCancelarBSO_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnCancelarBSO.Click
        Mouse.OverrideCursor = Cursors.Wait
        Dim eventoBit = CBitacoraFRIDA.GenerarEvento(CBitacoraFRIDA.CveEventosBit.CONFIG_BSO, CServiciosMacrosSyBaseDB.IDUSUARIO, "FLParamConfigGral.xaml -> btnCancelarBSO")
        Try
            If ValidaFechaHabil(DateTime.Parse(Me.dtpModificarFechaBSO.Text)) Then
                eventoBit.GuadarDetalle("Fecha",Me.dtpModificarFechaBSO.Text)
                If MessageBox.Show ("En caso de existir BSO abierta ésta se cancelará, ¿Desea guardar los cambios?", tituloMensaje, MessageBoxButton.YesNo, MessageBoxImage.Question)  = MessageBoxResult.Yes Then
                    servicioGenerales.CancelarFechaBSO(DateTime.Parse(Me.dtpCancelFechaBSO.Text))
                    servicioGenerales.RegistrarNotificacion("Config BSO - Se cancela fecha BSO")
                    MessageBox.Show("Operación Exitosa" , tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Information)
                End If
            Else
                MessageBox.Show ("La fecha seleccionada no es un día habil.", tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Exclamation) 
            End If
            eventoBit.ActualizarFechaFinDelEvento()
         Catch ex As Exception
            Dim errorBit = eventoBit.GuardarError("Error al actualizar BSO: " & ex.Message)
            eventoBit.ActualizarFechaFinDelEvento()
            Mouse.OverrideCursor = Nothing
            MessageBox.Show("Error TI500. Error al actualizar BSO: " & ex.Message & " -Codigo:" & errorBit.IdError, tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Error)
        End Try
        
        Mouse.OverrideCursor = Nothing
    End Sub

#End Region

#Region "TAB DIRECCION MAIL"
    Private Sub cmbIntermediarios_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs)
        Mouse.OverrideCursor = Cursors.Wait
        Try
            Dim inter As CTCatalogoGenerico
            inter = Me.cmbIntermediarios.SelectedItem
            Dim listaMails = servicioGenerales.ObtieneDireccionMails(inter.Clave)

            Me.grdEmails.ItemsSource = listaMails

        Catch ex As Exception
            Mouse.OverrideCursor = Nothing
            MessageBox.Show("Error TI500. Error al cargar direccion mails: " & ex.Message, tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Error)
        End Try

        Mouse.OverrideCursor = Nothing

    End Sub

    Private Sub btnGuardar_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnGuardar.Click
        Mouse.OverrideCursor = Cursors.Wait
        
        If ValidarDireccionMail() Then
            Dim eventoBit = CBitacoraFRIDA.GenerarEvento(CBitacoraFRIDA.CveEventosBit.CATALOGO_CORREOS, CServiciosMacrosSyBaseDB.IDUSUARIO, "FLParamConfigGral.xaml -> btnGuardar")
            Try
                If MessageBox.Show("¿Desea guardar los cambios?", tituloMensaje, MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
                    
                    Dim inter As CTCatalogoGenerico
                    inter = Me.cmbIntermediarios.SelectedItem
                    Dim listaMails = Me.grdEmails.ItemsSource
                    eventoBit.GuadarDetalle("InterClave",inter.Clave)
                    servicioGenerales.GuardarMails(inter.Clave, listaMails)
                    MessageBox.Show("Operación Exitosa", tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Information)
                End If
                eventoBit.ActualizarFechaFinDelEvento()
            Catch ex As Exception
                Dim errorBit = eventoBit.GuardarError("Error al guardar correos: " & ex.Message)
                eventoBit.ActualizarFechaFinDelEvento()
                Mouse.OverrideCursor = Nothing
                MessageBox.Show("Error TI500. Error al guardar direccion mails: " & ex.Message & " -Codigo:" & errorBit.IdError, tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Error)
            End Try
                
        End If
        
        Mouse.OverrideCursor = Nothing
    End Sub

    Private Function ValidarDireccionMail() As Boolean
        Dim EmailRegex As Regex = New Regex("(?<user>[^@]+)@(?<host>.+)")
        Dim M As Match
        Dim mailsIncorrectos = New System.Text.StringBuilder()
        Dim listaMails = Me.grdEmails.ItemsSource
        For Each mail As CTParamCartaEnvio In listaMails
            M = EmailRegex.Match(mail.DireccionMail)
            If Not M.Success Then
                mailsIncorrectos.Append(mail.DireccionMail)
                mailsIncorrectos.AppendLine()
            End If
        Next

        If mailsIncorrectos.ToString().Length > 0 Then
            MessageBox.Show("Las siguientes direcciones son incorrectas:" & vbCrLf & mailsIncorrectos.ToString(), tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Exclamation)
            Return False
        End If

        Return True

    End Function

    Private Sub btnAgregar_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAgregar.Click
        Dim listaMails As List(Of CTParamCartaEnvio) = Me.grdEmails.ItemsSource
        If listaMails Is Nothing Then
            listaMails = New List(Of CTParamCartaEnvio)
        End If
        Dim mail = New CTParamCartaEnvio()
        mail.DireccionMail = ""
        listaMails.Add(mail)
        Me.grdEmails.ItemsSource = listaMails
        Me.grdEmails.Items.Refresh()
        Me.grdEmails.UpdateLayout()
    End Sub

    Private Sub btnEliminar_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnEliminar.Click
        Dim listaMails As List(Of CTParamCartaEnvio) = Me.grdEmails.ItemsSource
        Dim param As CTParamCartaEnvio
        param = Me.grdEmails.SelectedItem
        If param IsNot Nothing Then
            listaMails.Remove(param)
        End If
        Me.grdEmails.ItemsSource = listaMails
        Me.grdEmails.Items.Refresh()
        Me.grdEmails.UpdateLayout()
    End Sub

#End Region

#Region "TAB FECHAS INHABILES"

    Private Sub btnCargaDecalog_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnCargaDecalog.Click
        Mouse.OverrideCursor = Cursors.Wait
        
        If ValidaFechaDecalog() Then
            If MessageBox.Show ("¿Desea cargar las fechas inhabiles de Decalog?", tituloMensaje, MessageBoxButton.YesNo, MessageBoxImage.Question)  = MessageBoxResult.Yes Then
                Dim eventoBit = CBitacoraFRIDA.GenerarEvento(CBitacoraFRIDA.CveEventosBit.CATALOGO_FECHAS_INHABILES, CServiciosMacrosSyBaseDB.IDUSUARIO, "FLParamConfigGral.xaml -> btnCargaDecalog")
                Try
                    eventoBit.GuadarDetalle("FechaIni", Me.dtpFechaInicio.Text)
                    eventoBit.GuadarDetalle("FechaFin", Me.dtpFechaFin.Text)
                    servicioGenerales.CargarFechasDecalog(DateTime.Parse(Me.dtpFechaInicio.Text), DateTime.Parse(Me.dtpFechaFin.Text))
                    eventoBit.ActualizarFechaFinDelEvento()
                    MessageBox.Show("Operación Exitosa" , tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Information)
                Catch ex As Exception
                    Dim errorBit = eventoBit.GuardarError("Error al actualizar fechas: " & ex.Message)
                    eventoBit.ActualizarFechaFinDelEvento()
                    Mouse.OverrideCursor = Nothing
                    MessageBox.Show("Error TI500. Error al actualizar fechas inhabiles: " & ex.Message & " -Codigo:" & errorBit.IdError, tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Error)
                End Try
                    
            End If
        End If
        
        Mouse.OverrideCursor = Nothing
    End Sub

    Private Function ValidaFechaDecalog() As Boolean
        If Me.dtpFechaInicio.Text = "" Then
            MessageBox.Show ("Debe seleccionar una fecha inicio.", tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Exclamation) 
            Return False
        End If

        If Me.dtpFechaFin.Text = "" Then
            MessageBox.Show ("Debe seleccionar una fecha fin.", tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Exclamation) 
            Return False
        End If

        If Date.Parse(Me.dtpFechaFin.Text) < Date.Parse(Me.dtpFechaInicio.Text) Then
            MessageBox.Show ("La fecha inicio debe ser mayor o igual a fecha fin.", tituloMensaje, MessageBoxButton.OK, MessageBoxImage.Exclamation) 
            Return False
        End If

        Return True
    End Function

    Private Function ValidaFechaHabil(ByVal fecha As Date) As Boolean
        For Each fechain As CFechaNoLab In lstFechasInhabiles
            If fechain.Fechanolab.ToString("dd/MM/yyyy") = fecha.ToString("dd/MM/yyyy")
                Return False
            End If
        Next
        If fecha.DayOfWeek() = DayOfWeek.Saturday or fecha.DayOfWeek() = DayOfWeek.Sunday Then
            Return False
        End If
            
        Return True
    End Function
 
    Private Function GetSiguienteDiaHabil(ByVal fecha As DateTime) As DateTime
        Dim flag As Boolean = False
        While Not flag
            fecha = fecha.AddDays(1)
            flag = ValidaFechaHabil(fecha)
        End While
        Return fecha
    End Function

    Private Sub cargarFechasNoLab()
Dim negocioLiq As New CLiquidezServicio()
Dim servGral As New CServiciosGenerales()



   Try
      lstFechasInhabiles = servGral.ObtenerFechasNoLab(1)
      Me.grdFecNoLab.ItemsSource =  lstFechasInhabiles '***********OPTIMIZAR PARÁAMETRO**********
      Me.grdFecNoLab.Items.Refresh () 

   Catch ex As Exception
            MessageBox.Show("Error TI500. No se pudo cargar los días no laborales debido a: " & ex.Message, "Carga de fondos", MessageBoxButton.OK, MessageBoxImage.Error)
   End Try

End Sub

Private Function ObtenerCelda(ByRef miDataGrid As DataGrid, ByVal indexRow As Integer, ByVal indexCol As Integer) As DataGridCell

Try
      Dim row As DataGridRow = miDataGrid.ItemContainerGenerator.ContainerFromIndex(indexRow)
      Dim cellContent As Object = miDataGrid.Columns(indexCol).GetCellContent(row)

      Dim objDepend As DependencyObject = cellContent
      Dim celda As DataGridCell = Nothing

       While Not objDepend Is Nothing

            If objDepend.GetType().Name = "DataGridCell" Then
               celda = objDepend
               Return celda
            End If
           objDepend = VisualTreeHelper.GetParent(objDepend)
      End While
Catch ex As Exception
    Throw ex
End Try

Return Nothing
End Function


Private Sub InicializarEstadoFecNoLab()

    Me.Calendario.IsEnabled = False
    Me.grdFecNoLab.IsEnabled = True

    Me.Calendario.DisplayDate = Date.Today
    Me.Calendario.SelectedDate = Nothing

    Me.grdFecNoLab.SelectedItem = Nothing

    btnActualizarFecNoLAb.IsEnabled = True
    btnEliminarFecNoLAb.IsEnabled = True
    btnAltaFecNoLAb.IsEnabled = True


    Me.btnAceptar.Visibility = Visibility.Collapsed
    Me.btnCancelar.Visibility = Visibility.Collapsed

    operacionFecNoLab = TipoOperacion.ninguna

End Sub


Private Sub grdFecNoLab_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles grdFecNoLab.SelectionChanged



    If Not chkEliminacionMasiva.IsChecked Then

             Dim FecNoLab As CFechaNoLab

             FecNoLab = Me.grdFecNoLab.SelectedItem

             If Not FecNoLab Is Nothing Then

                Me.Calendario.DisplayDate = FecNoLab.Fechanolab
                Me.Calendario.SelectedDate = FecNoLab.Fechanolab
                Me.Calendario.UpdateLayout()

              Else

                 Me.Calendario.DisplayDate = Date.Today
                 Me.Calendario.SelectedDate = Nothing
                 Me.Calendario.UpdateLayout()

             End If
    End If



End Sub


Private Sub btnAltaFecNoLAb_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAltaFecNoLAb.Click

    Me.Calendario.IsEnabled = True

    Me.Calendario.DisplayDate = Date.Today
    Me.Calendario.SelectedDate = Nothing
    Me.Calendario.UpdateLayout()
    Me.grdFecNoLab.IsEnabled = False

    btnActualizarFecNoLAb.IsEnabled = False
    btnEliminarFecNoLAb.IsEnabled = False

    Me.btnAceptar.Visibility = Visibility.Visible
    Me.btnCancelar.Visibility = Visibility.Visible


    operacionFecNoLab = TipoOperacion.Alta



End Sub


Private Sub btnActualizarSAL_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnActualizarFecNoLAb.Click



   If grdFecNoLab.SelectedItem Is Nothing Then
      MessageBox.Show("Necesita seleccionar una fecha", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Exclamation)
      Exit Sub
   End If

    Me.Calendario.IsEnabled = True

    btnAltaFecNoLAb.IsEnabled = False
    btnEliminarFecNoLAb.IsEnabled = False

    Me.btnAceptar.Visibility = Visibility.Visible
    Me.btnCancelar.Visibility = Visibility.Visible


      operacionFecNoLab = TipoOperacion.Actualizacion

End Sub


Private Sub btnEliminarFecNoLAb_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnEliminarFecNoLAb.Click

  Dim negocio As New CLiquidezServicio()
  Dim smsgError As String = ""


   If grdFecNoLab.SelectedItem Is Nothing Then
      MessageBox.Show("Necesita seleccionar una fecha", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Exclamation)
      Exit Sub
   End If

   If MessageBox.Show("¿Esta seguro que desea eliminar la fecha seleccionada?", "Fechas no laborales", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
        Dim eventoBit = CBitacoraFRIDA.GenerarEvento(CBitacoraFRIDA.CveEventosBit.CATALOGO_FECHAS_INHABILES, CServiciosMacrosSyBaseDB.IDUSUARIO, "FLParamConfigGral.xaml -> btnEliminarFecNoLAb")
        Try

           Dim fechaSelect As CFechaNoLab = Me.grdFecNoLab.SelectedItem

           If negocio.EliminarFechaNoLab(fechaSelect.Fechanolab, smsgError) = True Then
              MessageBox.Show("Eliminación exitosa", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Information)
           Else
              Dim errorBit = eventoBit.GuardarError("Error al eliminar fecha: " & sMsgError)
              MessageBox.Show("No se pudo eliminar la fecha seleccionada debido a: " & smsgError & " -Codigo:" & errorBit.IdError, "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
           End If
           InicializarEstadoFecNoLab()
           cargarFechasNoLab()
            eventoBit.ActualizarFechaFinDelEvento()
        Catch ex As Exception
                Dim errorBit = eventoBit.GuardarError("Error al eliminar fecha: " & ex.Message)
                eventoBit.ActualizarFechaFinDelEvento()
                MessageBox.Show("Error TI500. Ocurrió un error en el proceso de eliminación, salga de la pagina actual y vuelva a entrar para verificar sí la operación concluyó ( " & ex.Message & ")." & " -Codigo:" & errorBit.IdError, "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
        End Try

   End If


End Sub


Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnCancelar.Click
    InicializarEstadoFecNoLab()
End Sub


Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAceptar.Click
 Dim negocio As New CLiquidezServicio()
 Dim eventoBit = CBitacoraFRIDA.GenerarEvento(CBitacoraFRIDA.CveEventosBit.CATALOGO_FECHAS_INHABILES, CServiciosMacrosSyBaseDB.IDUSUARIO, "FLParamConfigGral.xaml -> btnAceptar")

 Dim smsgError As String = ""

Try


  Select Case operacionFecNoLab

     Case TipoOperacion.Alta
          Dim fechaSelect As Date = Me.Calendario.SelectedDate
          Dim lstFechasNoLab As List(Of CFechaNoLab) = Me.grdFecNoLab.ItemsSource

           If negocio.AltaFechaNoLab(fechaSelect, smsgError) = True Then
               'cargarFechasNoLab()

               
               lstFechasNoLab.Add (New CFechaNoLab(fechaSelect))                      
               Me.grdFecNoLab.ItemsSource = lstFechasNoLab               
               lstFechasInhabiles = lstFechasNoLab
               Me.grdFecNoLab.Items.Refresh 
                 
               MessageBox.Show ("Alta exitosa", "Fechas no laborales",MessageBoxButton.OK,MessageBoxImage.Information ) 
           Else
              Dim errorBit = eventoBit.GuardarError("Error al actualizar fecha: " & smsgError)
              MessageBox.Show ("No se pudo dar de alta la nueva fecha debido a: " & smsgError & " -Codigo:" & errorBit.IdError, "Fechas no laborales",MessageBoxButton.OK,MessageBoxImage.Error)

           End If


            InicializarEstadoFecNoLab()

     Case TipoOperacion.Actualizacion
           Dim fecNvaNoLab As Date = Me.Calendario.SelectedDate
           Dim fechaSelect As CFechaNoLab = Me.grdFecNoLab.SelectedItem


           If negocio.ActualizarFechaNoLab(fechaSelect.Fechanolab, fecNvaNoLab, smsgError) = True Then
              MessageBox.Show("Actualización exitosa", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Information)
           Else
              Dim errorBit = eventoBit.GuardarError("Error al actualizar fecha: " & smsgError)
              MessageBox.Show("No se pudo actualizar la fecha debido a: " & smsgError & " -Codigo:" & errorBit.IdError, "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
           End If
           InicializarEstadoFecNoLab()

           cargarFechasNoLab()
           Dim lstFechasNoLab As List(Of CFechaNoLab) = Me.grdFecNoLab.ItemsSource
           Dim fecha As CFechaNoLab

           fecha = lstFechasNoLab.Find(Function(x) x.Fechanolab.Equals(fecNvaNoLab))

           Me.grdFecNoLab.SelectedItem = fecha

           Me.grdFecNoLab.ScrollIntoView(Me.grdFecNoLab.SelectedItem)
           Me.grdFecNoLab.UpdateLayout()



  End Select

 eventoBit.ActualizarFechaFinDelEvento()

Catch ex As Exception
    Dim errorBit = eventoBit.GuardarError("Error al actualizar fecha: " & ex.Message)
    eventoBit.ActualizarFechaFinDelEvento()
    InicializarEstadoFecNoLab()

     Select Case operacionFecNoLab

     Case TipoOperacion.Alta
                    MessageBox.Show("Error TI500. Ocurrió un error en el proceso de alta, salga de la pagina actual y vuelva a entrar para verificar si la operación concluyó ( " & ex.Message & ")." & " -Codigo:" & errorBit.IdError, "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
     Case TipoOperacion.Actualizacion
                    MessageBox.Show("Error TI500. Ocurrió un error en el proceso de actualización, salga de la pagina actual y vuelva a entrar para verificar sí la operación concluyó ( " & ex.Message & ")." & " -Codigo:" & errorBit.IdError, "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
     Case Else
                    MessageBox.Show("Error TI500. Ocurrió un error:   " & ex.Message & " -Codigo:" & errorBit.IdError, "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
  End Select


End Try



End Sub


Private Sub chkEliminacionMasiva_Checked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles chkEliminacionMasiva.Checked
   bdrOperaIndividual.Visibility = Windows.Visibility.Collapsed
   bdrCargaDecalog.Visibility = Windows.Visibility.Collapsed
   btnEliminarMasivaFecNoLAb.Visibility = Windows.Visibility.Visible
   grdFecNoLab.SelectionMode = DataGridSelectionMode.Extended
End Sub


Private Sub chkEliminacionMasiva_Unchecked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles chkEliminacionMasiva.Unchecked
   bdrOperaIndividual.Visibility = Windows.Visibility.Visible
   bdrCargaDecalog.Visibility = Windows.Visibility.Visible
   btnEliminarMasivaFecNoLAb.Visibility = Windows.Visibility.Hidden
   grdFecNoLab.SelectionMode = DataGridSelectionMode.Single

End Sub


Private Sub btnEliminarMasivaFecNoLAb_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnEliminarMasivaFecNoLAb.Click
Dim eventoBit = CBitacoraFRIDA.GenerarEvento(CBitacoraFRIDA.CveEventosBit.CATALOGO_FECHAS_INHABILES, CServiciosMacrosSyBaseDB.IDUSUARIO, "FLParamConfigGral.xaml -> btnEliminarMasivaFecNoLAb")
Dim negocio As New CLiquidezServicio()
Dim sMsgError As String = ""



   If grdFecNoLab.SelectedItems.Count <= 0 Then
      MessageBox.Show("Necesita seleccionar almenos una fecha.", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Information)
      Exit Sub
   End If

  Dim lst As Object = grdFecNoLab.SelectedItems

   If (negocio.EliminacionMasivaDeFechasNoLab(lst, sMsgError)) = True Then
      MessageBox.Show("La eliminación de fechas fue exitosa.", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Information)
   Else
      Dim errorBit = eventoBit.GuardarError("Error al eliminar fechas: " & sMsgError)
      MessageBox.Show("Ocurrió un error en el proceso de eliminación: " & sMsgError & " -Codigo:" & errorBit.IdError, "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
   End If
   cargarFechasNoLab()

    eventoBit.ActualizarFechaFinDelEvento()
End Sub




#End Region


#Region "TAB CATALOGO FONDOS"



Private Sub grdFondosIndeval_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles grdFondosIndeval.SelectionChanged

Dim fondoIndeval As CTFondoIndeval
Dim gridFondoSel As DataGrid = CType(sender, DataGrid)
Dim sMsgError As String = ""



 '1) Se obtiene el fondo seleccionado
  fondoIndeval = CType(gridFondoSel.SelectedItem, CTFondoIndeval)

  If fondoIndeval Is Nothing Then    
     Exit Sub
  End If

  fondoIndevalActual = fondoIndeval

  '2) Actualizar TVNG asociados al fondo seleccionado

   lstTVNGxFondo = servicio.ObtenerTVNGxIndeval(fondoIndeval.Fondo, sMsgError)

    If Not sMsgError.Equals("") Then       
       MessageBox.Show("Error al consultar el TVNG para el fondo: " & fondoIndeval.Fondo , "Relación de TVNG por fondo", MessageBoxButton.OK, MessageBoxImage.Exclamation)
       sMsgError = ""
    End If

   grdFondosTVNG.ItemsSource = lstTVNGxFondo
   grdFondosTVNG.UpdateLayout()




  '3) Actualizar Intermediarios asociados al fondo seleccionado

   lstIntermediarioxFondo = servicio.ObtenerIntermediarioxFondo(fondoIndeval.Fondo, sMsgError)

    If Not sMsgError.Equals("") Then            
       MessageBox.Show("Error al consultar los Intermediarios para el fondo: " & fondoIndeval.Fondo, "Relación de Intermediarios por fondo", MessageBoxButton.OK, MessageBoxImage.Exclamation)
       sMsgError = ""
    End If

   grdFondosInter.ItemsSource = lstIntermediarioxFondo
   grdFondosInter.UpdateLayout()




End Sub

Private Sub grdFondosIndeval_BeginningEdit(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles grdFondosIndeval.BeginningEdit
     fondoIndevalEnEdicion = grdFondosIndeval.CurrentItem
End Sub

Private Sub grdFondosIndeval_CellEditEnding(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdFondosIndeval.CellEditEnding

      Dim fondos As ObservableCollection(Of CTFondoIndeval) = grdFondosIndeval.ItemsSource
      Dim fondoActual As CTFondoIndeval
      Dim fondoCambio As New CTFondoIndeval()

      Dim sMsgError As String = ""


      Select Case e.EditAction

            Case DataGridEditAction.Commit

                 If Not sender.CurrentItem Is Nothing Then

                    Dim txtContenidoCeldaFondo As Object = grdFondosIndeval.Columns(0).GetCellContent(grdFondosIndeval.CurrentItem)
                    Dim txtContenidoCeldaIndeval As Object = grdFondosIndeval.Columns(1).GetCellContent(grdFondosIndeval.CurrentItem)

                    fondoActual = TryCast(grdFondosIndeval.CurrentCell.Item, CTFondoIndeval)

                    If fondoActual.Equals(fondoIndevalEnEdicion) = False Then
                         CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                    End If

                    fondoCambio.Fondo = txtContenidoCeldaFondo.Text
                    fondoCambio.Indeval = txtContenidoCeldaIndeval.Text
                    fondoCambio.EsEditableNuevo = fondoActual.EsEditableNuevo


                    Dim eventoBit =  CBitacoraFRIDA.GenerarEvento (CBitacoraFRIDA.CveEventosBit.CATALOGO_FONDO_TVNG_INTER,CServiciosMacrosSyBaseDB.IDUSUARIO,"FLParamConfigGral->grdFondosIndeval_CellEditEnding")    



                    If fondoCambio.EsEditableNuevo Then

                       eventoBit.GuadarDetalle ("Alta_Nuevo_fondo","Fondo: " & fondoCambio.Fondo & ", INDEVAL: " & fondoCambio.Indeval)

                       fondoCambio.EsEditableNuevo = False
                       If servicio.DarDeAltaFondoIndeval(fondoCambio, sMsgError) = False Then
                           Dim errorBit = eventoBit.GuardarError ("Error al dar de alta el fondo: " & fondoCambio.Fondo) 
                           errorBit.GuardarDetalle ("Descripción",sMsgError)                            
                           MessageBox.Show("Error al intentar dar de alta el fondo " & fondoCambio.Fondo & ". Consulte el código:" & errorBit.IdError & "-" & errorBit.IdRegEvento , "Alta de fondo", MessageBoxButton.OK, MessageBoxImage.Error)
                           CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                       Else 
                         fondoActual.Fondo   =  fondoCambio.Fondo
                         fondoActual.Indeval =   fondoCambio.Indeval 
                         fondoActual.EsEditableNuevo = False
                       End If                       

                    Else
                                     
                         eventoBit.GuadarDetalle ("Info. actual", "Fondo: " & fondoActual.Fondo & ", INDEVAL: " & fondoActual.Indeval)
                         eventoBit.GuadarDetalle ("Info. nueva", "Fondo: " & fondoCambio.Fondo & ", INDEVAL: " & fondoCambio.Indeval)
                                                                           
                        If servicio.ActualizarFondo(fondoActual.Fondo, fondoCambio, sMsgError) = False Then
                             Dim errorBit = eventoBit.GuardarError ("Error al actualizar el fondo: " & fondoActual.Fondo & ", INDEVAL: " & fondoActual.Indeval ) 
                             errorBit.GuardarDetalle ("Info_nueva","Fondo: " & fondoCambio.Fondo & ", INDEVAL: " & fondoCambio.Indeval   )                            
                             errorBit.GuardarDetalle ("Descripción",sMsgError)                            
                             MessageBox.Show("Error al intentar actualizar el fondo " & fondoActual.Fondo & ". Consulte el código:" & errorBit.IdError & "-" & errorBit.IdRegEvento, "Actualizar el fondo", MessageBoxButton.OK, MessageBoxImage.Error)
                             CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                        End If

                    End If


                    eventoBit.ActualizarFechaFinDelEvento ()

                 Else

                     CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                     
                 End If




            Case DataGridEditAction.Cancel

                fondoCambio = TryCast(grdFondosIndeval.Items(grdFondosIndeval.Items.Count - 1), CTFondoIndeval)
                If fondoCambio.EsEditableNuevo Then
                   fondos.Remove(fondoCambio)                   
                   grdFondosIndeval.UpdateLayout()
                End If


      End Select

      fondoIndevalEnEdicion = Nothing


End Sub



Private Sub btnGuardarFondoInter_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnGuardarFondoInter.Click
  Dim sMsgError As String = ""

  Mouse.OverrideCursor = Cursors.Wait

  If fondoIndevalActual Is Nothing Then
     Mouse.OverrideCursor = Nothing
     MessageBox.Show("No se puede almacenar la información debido a que el fondo seleccionado no es válido", "Actualización de relación: Fondo-Intermediario", MessageBoxButton.OK, MessageBoxImage.Exclamation)
     Exit Sub
  End If


  Dim eventoBit =  CBitacoraFRIDA.GenerarEvento (CBitacoraFRIDA.CveEventosBit.CATALOGO_FONDO_TVNG_INTER,CServiciosMacrosSyBaseDB.IDUSUARIO,"FLParamConfigGral->btnGuardarFondoInter_Click")    



  If servicio.ActualizarInterFondos(lstIntermediarioxFondo, fondoIndevalActual.Fondo, sMsgError) = True Then
  
     eventoBit.GuadarDetalle ("ActualizarInterFondos","Se actualizaron Intermediarios para el fondo: " & fondoIndevalActual.Fondo)
  
     MessageBox.Show("Información almacenada correctamente", "Actualización de relación: Fondo-Intermediario", MessageBoxButton.OK, MessageBoxImage.Information)
     lstIntermediarioxFondo = servicio.ObtenerIntermediarioxFondo(fondoIndevalActual.Fondo, sMsgError)
     grdFondosInter.ItemsSource = lstIntermediarioxFondo
     grdFondosInter.UpdateLayout()

  Else
     Dim errorBit = eventoBit.GuardarError ("Error al intentar actualizar la información de los Intermediarios para el fondo: " & fondoIndevalActual.Fondo)
     errorBit.GuardarDetalle ("Descripción", sMsgError)
     MessageBox.Show("No se pudo almacenar la información. Verifique el código: " & errorBit.IdError & "-" & errorBit.IdRegEvento, "Actualización de relación: Fondo-Intermediario", MessageBoxButton.OK, MessageBoxImage.Exclamation)
  End If

  eventoBit.ActualizarFechaFinDelEvento ()


  Mouse.OverrideCursor = Nothing
End Sub

 Private Sub btnGuardarFondoTvng_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnGuardarFondoTvng.Click

   Dim sMsgError As String = ""

  Mouse.OverrideCursor = Cursors.Wait

  If fondoIndevalActual Is Nothing Then
     Mouse.OverrideCursor = Nothing
     MessageBox.Show("No se puede almacenar la información debido a que el fondo seleccionado no es válido", "Actualización de relación: Fondo-TVNG", MessageBoxButton.OK, MessageBoxImage.Exclamation)
     Exit Sub
  End If


  Dim eventoBit =  CBitacoraFRIDA.GenerarEvento (CBitacoraFRIDA.CveEventosBit.CATALOGO_FONDO_TVNG_INTER,CServiciosMacrosSyBaseDB.IDUSUARIO,"FLParamConfigGral->btnGuardarFondoTvng_Click")    


  If servicio.ActualizarTVNGFondos(lstTVNGxFondo, fondoIndevalActual.Fondo, sMsgError) = True Then
     
     eventoBit.GuadarDetalle ("ActualizarTVNGFondos","Se actualizaron los TVNG para el fondo: " & fondoIndevalActual.Fondo)

     MessageBox.Show("Información almacenada correctamente", "Actualización de relación: Fondo-TVNG", MessageBoxButton.OK, MessageBoxImage.Information)
     lstTVNGxFondo = servicio.ObtenerTVNGxIndeval(fondoIndevalActual.Fondo, sMsgError)
     grdFondosTVNG.ItemsSource = lstTVNGxFondo
     grdFondosTVNG.UpdateLayout()

  Else

     Dim errorBit = eventoBit.GuardarError ("Error al intentar actualizar la información de los TVNG para el fondo: " & fondoIndevalActual.Fondo)
     errorBit.GuardarDetalle ("Descripción", sMsgError)   
     MessageBox.Show("No se pudo almacenar la información. Verificar el código: " & errorBit.IdError & "-" & errorBit.IdRegEvento, "Actualización de relación: Fondo-TVNG", MessageBoxButton.OK, MessageBoxImage.Exclamation)
  End If


  eventoBit.ActualizarFechaFinDelEvento()


  Mouse.OverrideCursor = Nothing


End Sub


Private Sub btnAgregarPEJ_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAgregarPEJ.Click

 Dim regNvo As New CTFondoIndeval(__LEYENDA_ALTA_FONDO__, "", True)

  Dim lstFondos As New ObservableCollection(Of CTFondoIndeval)

   lstFondos = grdFondosIndeval.ItemsSource
   lstFondos.Add(regNvo)
   grdFondosIndeval.ScrollIntoView(grdFondosIndeval.Items(grdFondosIndeval.Items.Count - 1))
   grdFondosIndeval.UpdateLayout()


  Dim celda As DataGridCell = ObtenerCelda(grdFondosIndeval, grdFondosIndeval.Items.Count - 1, 0)
  If Not celda Is Nothing Then
    celda.Focus()
    grdFondosIndeval.BeginEdit()
    'celda.IsSelected = True

  End If


End Sub

Private Sub btnEliminarPEJ_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnEliminarPEJ.Click

 Dim fondos As ObservableCollection(Of CTFondoIndeval) = grdFondosIndeval.ItemsSource
 Dim fondoElim As New ObservableCollection(Of CTFondoIndeval)
 Dim fondoNoElim As New ObservableCollection(Of CTFondoIndeval)

 Dim sMsgError As String = ""

 Dim nomFondosNoElim As New System.Text.StringBuilder()


  If grdFondosIndeval.SelectedCells.Count > 0 Then
     If MessageBox.Show("Esta seguro que desea eliminar los fondos seleccionados", "Eliminar fondos", MessageBoxButton.OKCancel, MessageBoxImage.Question) = MessageBoxResult.OK Then

        For Each celda As DataGridCellInfo In grdFondosIndeval.SelectedCells
           fondoElim.Add(CType(celda.Item, CTFondoIndeval))
        Next

        For Each fondo As CTFondoIndeval In fondoElim
           If servicio.EliminarFondoIndeval(fondo, sMsgError) Then
               fondos.Remove(fondo)
            Else
               fondoNoElim.Add(fondo)
           End If

        Next
     End If

  End If
 
 grdFondosIndeval.UpdateLayout()


 If fondoNoElim.Count > 0 Then
    For Each fondo As CTFondoIndeval In fondoNoElim
        nomFondosNoElim.Append(fondo.Fondo)
         nomFondosNoElim.Append(", ")
    Next

    MessageBox.Show("Los fondos: " & nomFondosNoElim.ToString() & " no pudieron ser eliminados.", "Eliminar fondos", MessageBoxButton.OK, MessageBoxImage.Exclamation)

 End If




End Sub



#End Region



End Class
